/**
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

{namespace com.google.gerrit.server.mail.template}

/*
 * Private templates that cannot be overridden.
 */

/**
 * Private template to generate "View Change" buttons.
 * @param email
 */
{template .ViewChangeButton}
  <a href="{$email.changeUrl}">View Change</a>
{/template}

/**
 * Private template to render PRE block with consistent font-sizing.
 * @param content
 */
{template .Pre}
  {let $preStyle kind="css"}
    font-family: monospace,monospace; // Use this to avoid browsers scaling down
                                      // monospace text.
    white-space: pre-wrap;
  {/let}
  <pre style="{$preStyle}">{$content|changeNewlineToBr}</pre>
{/template}

/**
 * Take a list of unescaped comment blocks and emit safely escaped HTML to
 * render it nicely with wiki-like format.
 *
 * Each block is a map with a type key. When the type is 'paragraph', or 'pre',
 * it also has a 'text' key that maps to the unescaped text content for the
 * block. If the type is 'list', the map will have a 'items' key which maps to
 * list of unescaped list item strings. If the type is quote, the map will have
 * a 'quotedBlocks' key which maps to the blocks contained within the quote.
 *
 * This mechanism encodes as little structure as possible in order to depend on
 * the Soy autoescape mechanism for all of the content.
 *
 * @param content
 */
{template .WikiFormat}
  {let $blockquoteStyle kind="css"}
    border-left: 1px solid #aaa;
    margin: 10px 0;
    padding: 0 10px;
  {/let}

  {let $pStyle kind="css"}
    white-space: pre-wrap;
    word-wrap: break-word;
  {/let}

  {foreach $block in $content}
    {if $block.type == 'paragraph'}
      <p style="{$pStyle}">{$block.text|changeNewlineToBr}</p>
    {elseif $block.type == 'quote'}
      <blockquote style="{$blockquoteStyle}">
        {call .WikiFormat}{param content: $block.quotedBlocks /}{/call}
      </blockquote>
    {elseif $block.type == 'pre'}
      {call .Pre}{param content: $block.text /}{/call}
    {elseif $block.type == 'list'}
      <ul>
        {foreach $item in $block.items}
          <li>{$item}</li>
        {/foreach}
      </ul>
    {/if}
  {/foreach}
{/template}

/**
 * @param diffLines
 */
{template .UnifiedDiff}
  {let $addStyle kind="css"}
    color: hsl(120, 100%, 40%);
  {/let}

  {let $removeStyle kind="css"}
    color: hsl(0, 100%, 40%);
  {/let}

  {let $preStyle kind="css"}
    font-family: monospace,monospace; // Use this to avoid browsers scaling down
                                      // monospace text.
    white-space: pre-wrap;
  {/let}

  <pre style="{$preStyle}">
    {foreach $line in $diffLines}
      {if $line.type == 'add'}
        <span style="{$addStyle}">
      {elseif $line.type == 'remove'}
        <span style="{$removeStyle}">
      {else}
        <span>
      {/if}
        {$line.text}
      </span><br>
    {/foreach}
  </pre>
{/template}
